#include <cstdio>
#include <map>
#include <algorithm>

using namespace std;

struct Node
{
    int a, b, c;
    Node( ) { }
    Node( int _a, int _b, int _c )
        : a( _a ), b( _b ), c( _c ) { }
};

bool operator < ( const Node &a, const Node &b )
{
    if ( a.a != b.a ) return a.a < b.a;
    if ( a.b != b.b ) return a.b < b.b;
    return a.c < b.c;
}

int a[ 16 ], n, ans, sum;
map<pair<int, int>, bool> m;

void dfs( int p, int x, int y, int z )
{
    int i;
    if ( sum <= z * 2 || sum <= x * 2 || sum <= y * 2 ) return ;
    if ( p < n )
    {
        dfs( p + 1, x + a[ p ], y, z );
        dfs( p + 1, x, y + a[ p ], z );
        if ( y ) dfs( p + 1, x, y, z + a[ p ] );
    }
    else
    {
        int m1 = x, m2 = x;
        if ( m1 > y ) m1 = y;
        if ( m1 > z ) m1 = z;
        if ( m2 < y ) m2 = y;
        if ( m2 < z ) m2 = z;
        if ( !m[ pair<int, int>( m1, m2 ) ] )
        {
            ans++;
            m[ pair<int, int>( m1, m2 ) ] = 1;
        }
    }
}

int main( )
{
    int t, i, j, k;
    scanf("%d", &t);
    while ( t-- )
    {
        scanf("%d", &n);
        m.clear( );
        ans = 0;
        sum = 0;
        for ( i = 0; i < n; i++ )
        {
            scanf("%d", &a[ i ]);
            sum += a[ i ];
        }
        sort( a, a + n );
        dfs( 1, a[ 0 ], 0, 0 );
        printf("%d\n", ans);
    }
    return 0;
}
